/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ufes.gpf.sgm.presenter;

import edu.ufes.gpf.sgm.dao.MandadosDAOMySQL;
import edu.ufes.gpf.sgm.dao.PessoasDAOMySQL;
import edu.ufes.gpf.sgm.model.Mandado;
import edu.ufes.gpf.sgm.model.Pessoa;
import edu.ufes.gpf.sgm.state.incluirMandado.AbstractStateIncluirMandado;
import edu.ufes.gpf.sgm.state.incluirMandado.EstadoInclusaoMandado;
import edu.ufes.gpf.sgm.state.incluirMandado.EstadoVisualizacaoMandado;
import edu.ufes.gpf.sgm.view.IncluirMandadoView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author byacatalunha
 */
public class IncluirMandadoPresenter {

    private IncluirMandadoView view;
    private MandadosDAOMySQL mandados;
    private AbstractStateIncluirMandado estado;
    private Mandado mandado;
    private PessoasDAOMySQL pessoas;

    public IncluirMandadoPresenter(Mandado mandado) {
        this.mandado = mandado;
        view = new IncluirMandadoView();
        carregarComboTipoMandado();
        try {
            pessoas = PessoasDAOMySQL.getInstancia();
            mandados = MandadosDAOMySQL.getInstancia();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(IncluirMandadoPresenter.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(IncluirMandadoPresenter.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (mandado == null) {
            estado = new EstadoInclusaoMandado(this);
        } else {
            estado = new EstadoVisualizacaoMandado(this);
        }
        view.getTxtPessoasRelacionadas().addKeyListener(new KeyAdapter() {

            @Override
            public void keyReleased(KeyEvent ke) {
                pesquisarPessoas();
            }
            
        });
        
        view.getBtnSair().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                sair();
            }
        });
        
        view.getBtnSalvar().addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                salvar();
            }
        });
        
        carregarListaPessoas(pessoas.buscarTodos());
        view.setVisible(true);
    }
    
    private void salvar()
    {
        estado.salvar();
    }
    
    private void sair()
    {
        estado.sair();
    }

    /**
     * @return the view
     */
    public IncluirMandadoView getView() {
        return view;
    }

    /**
     * @param view the view to set
     */
    public void setView(IncluirMandadoView view) {
        this.view = view;
    }

    /**
     * @return the mandados
     */
    public MandadosDAOMySQL getMandados() {
        return mandados;
    }

    /**
     * @param mandados the mandados to set
     */
    public void setMandados(MandadosDAOMySQL mandados) {
        this.mandados = mandados;
    }

    /**
     * @return the estado
     */
    public AbstractStateIncluirMandado getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(AbstractStateIncluirMandado estado) {
        this.estado = estado;
    }

    /**
     * @return the mandado
     */
    public Mandado getMandado() {
        return mandado;
    }

    /**
     * @param mandado the mandado to set
     */
    public void setMandado(Mandado mandado) {
        this.mandado = mandado;
    }

    /**
     * @return the pessoas
     */
    public PessoasDAOMySQL getPessoas() {
        return pessoas;
    }

    /**
     * @param pessoas the pessoas to set
     */
    public void setPessoas(PessoasDAOMySQL pessoas) {
        this.pessoas = pessoas;
    }

    private void pesquisarPessoas() {
        String nome = view.getTxtPessoasRelacionadas().getText();
        pessoas.buscarPorNome(nome);
    }
    
    public final void carregarListaPessoas(Collection<Pessoa> pessoas) {
        DefaultTableModel dtm = (DefaultTableModel) view.getTblPessoas().getModel();
        dtm.setNumRows(0);
        for (Iterator<Pessoa> it = pessoas.iterator(); it.hasNext();) {
            Pessoa p = it.next();
            String linha = p.toString();
            String valores[] = linha.split("%");
            dtm.addRow(new Object[]{valores[0], valores[1], valores[3]});
        }

        view.getTblPessoas().setModel(dtm);
    }
    
    public void carregarComboTipoMandado(){
        view.getCbmTipoMandado().addItem("<Selecionar>");
        view.getCbmTipoMandado().addItem("Citação");
        view.getCbmTipoMandado().addItem("Intimação");
        view.getCbmTipoMandado().addItem("Intimação e Citação");
        view.getCbmTipoMandado().addItem("Penhora");
    }
}
